package com.bdqn.design.singleton;

/**
 * Singleton [懒汉式]单例模式，整个程序中只有一个对象
 *
 * @author LILIBO
 * @since 2025/1/8
 */
public class Singleton02 {

    /**
     * 静态变量，该类的唯一实例
     */
    private static Singleton02 singleton;

    private String message;

    /**
     * 私有化构造器
     */
    private Singleton02() {
        this.message = "100G ...";
        try {
            System.out.println("3秒");
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 提供一个静态方法，返回该类的唯一实例（同步方法）
     *
     * @return
     */
    public static synchronized Singleton02 getInstance() {
        if (singleton == null) {
            singleton = new Singleton02();
        }
        return singleton;
    }

    // 模拟序号
    private int index = 0;

    /**
     * 获取下一个序号
     *
     * @return
     */
    public synchronized int next() {
        return ++index;
    }

}
